up
- Fórum
- OTServ
- Suporte
- Resolvidos
- (resolvido) Transformar esse Talkaction em Spell
(resolvido) Transformar esse Talkaction em Spell
Por gabriel28, 26 de out. de 2016 em Resolvidos
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

E qual o problema de manter isso em talkaction?
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

1 hora atrás, Poccnn disse:E qual o problema de manter isso em talkaction?
No server que estou montando, todas as spells serão compradas. E essa ai será comprada em um NPC que terá que fazer uma quest pra falar com ele e poder compra-la junto com outras.
info
Grupo: Campones
Registrado: 16/08/16
Posts: 95
Reputação: +35
Gênero: Masculino

script:
function onCastSpell(cid, var)
local storage = 79845 --storage para o exhaustion
local tempo = 5 --em segundos
local monsters = {
[1] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 2 },
[2] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4 },
[5] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4 },
[6] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6 },
[9] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6 },
[10] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 8 },
}
if exhaustion.check(cid, storage) then
doPlayerSendTextMessage(cid, 22, "You are exhausted.")
return true
end
--Player Status
local playerpos = getPlayerPosition(cid)
param = string.lower(param)
local loop = 0
function checkSummon()
for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
if param == k then
return true
end
end
return false
end
if not checkSummon() then
doPlayerSendCancel(cid, "You can't summon this monster.")
return true
end
for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
if (param == k) then
if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then
return doPlayerSendCancel(cid, "Você já tem sumons demais.")
else
--Summon
if getPlayerLevel(cid) < v.level then
return doPlayerSendCancel(cid, "Você não possui level suficiente.")
elseif getCreatureMana(cid) < v.mana then
return doPlayerSendCancel(cid, "Você não possui mana suficiente.")
end
doConvinceCreature(cid, doCreateMonster(param, playerpos))
doPlayerAddMana(cid, -v.mana, false)
exhaustion.set(cid, storage, tempo)
doSendMagicEffect(playerpos, 2)
return true
end
end
end
return true
end
Tag no spells.xml
<instant name="NOME DA SPELL" words="nome da spell" direction="1" lvl="30" maglv="50" mana="3000" soul="0" exhaustion="1" prem="0" enabled="1" script="LOCAL DO SCRIPT">
</instant>
Se der erro ou qualquer coisa posta ai.
Editado Outubro 27 por Hi im Mell
info
Grupo: Campones
Registrado: 19/10/16
Posts: 18
Reputação: +7
Gênero: Masculino

10 horas atrás, gabriel28 disse:
No server que estou montando, todas as spells serão compradas. E essa ai será comprada em um NPC que terá que fazer uma quest pra falar com ele e poder compra-la junto com outras.
mas dava so para colocar um valor de storage necessario para a talkaction, nem precisava transformar em spell, ao comprar era só mudar a storage.
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

19 horas atrás, Hi im Mell disse:script:
function onCastSpell(cid, var)
local storage = 79845 --storage para o exhaustion
local tempo = 5 --em segundos
local monsters = {
[1] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 2 },
[2] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4 },
[5] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4 },
[6] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6 },
[9] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6 },
[10] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 8 },
}
if exhaustion.check(cid, storage) then
doPlayerSendTextMessage(cid, 22, "You are exhausted.")
return true
end
--Player Status
local playerpos = getPlayerPosition(cid)
param = string.lower(param)
local loop = 0
function checkSummon()
for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
if param == k then
return true
end
end
return false
end
if not checkSummon() then
doPlayerSendCancel(cid, "You can't summon this monster.")
return true
end
for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
if (param == k) then
if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then
return doPlayerSendCancel(cid, "Você já tem sumons demais.")
else
--Summon
if getPlayerLevel(cid) < v.level then
return doPlayerSendCancel(cid, "Você não possui level suficiente.")
elseif getCreatureMana(cid) < v.mana then
return doPlayerSendCancel(cid, "Você não possui mana suficiente.")
end
doConvinceCreature(cid, doCreateMonster(param, playerpos))
doPlayerAddMana(cid, -v.mana, false)
exhaustion.set(cid, storage, tempo)
doSendMagicEffect(playerpos, 2)
return true
end
end
end
return true
end
Tag no spells.xml
<instant name="NOME DA SPELL" words="nome da spell" direction="1" lvl="30" maglv="50" mana="3000" soul="0" exhaustion="1" prem="0" enabled="1" script="LOCAL DO SCRIPT">
</instant>
Se der erro ou qualquer coisa posta ai.
Deu esse erro:
..../sumon.lua:onCastSpell
Description:
..../sumon.lua:18: bad argument #1 to 'lower' <string expected, got nil>
stack traceback:
[C]: in function 'lower'
....sumon.lua:21: in fuction <data/spells/scripts/summon/sumon.lua:1>
11 horas atrás, KNightmare Proj disse:mas dava so para colocar um valor de storage necessario para a talkaction, nem precisava transformar em spell, ao comprar era só mudar a storage.
Spell facilitaria minha vida, já que não sei mexer muito.
Temos que levar em consideração o seguinte: numa talkaction, podemos usar o argumento param para especificar qual o monstro que o jogador deseja invocar. Em spells, entretanto, não temos o luxo que a talkaction nos proporciona.
Naturalmente, permanecer uma talkaction seria mais fácil (bastaria, como já dito, manipular storages). Se, mesmo assim, você ainda quiser uma spell, podemos escrevê-la, apesar de talkaction ser mais viável para um tipo de código influenciado por um parâmetro no comando.
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

1 hora atrás, zipter98 disse:Temos que levar em consideração o seguinte: numa talkaction, podemos usar o argumento param para especificar qual o monstro que o jogador deseja invocar. Em spells, entretanto, não temos o luxo que a talkaction nos proporciona.
Naturalmente, permanecer uma talkaction seria mais fácil (bastaria, como já dito, manipular storages). Se, mesmo assim, você ainda quiser uma spell, podemos escrevê-la, apesar de talkaction ser mais viável para um tipo de código influenciado por um parâmetro no comando.
Mas se usar essa storage, mesmo assim talkaction não apareceria no spellbook, eu teria que criar uma magia não funcional com as mesmas características dessa talkaction, certo? Tipo, mesmo nome pra usar, mesma quantidade de mana, etc...
Tentei substituir essa parte: function onSay(cid, words, param, channel)
Por: function onCastSpell(cid, param)
E adicionei params="1" na tag da spell no xml, não da erro mas a magia não executa.
Sabe como resolver?
onCastSpell não possui um argumento responsável pelos parâmetros da fala. Por isso, as palavras-chaves limitam-se às configuradas na tag.
Por condições como mana, level e classe encontrarem-se na tag, não vi necessidade de mantê-las no código.
Naturalmente, sem poder usar um parâmetro para especificar qual summon o jogador deseja, será um código por monstro.
local summon_name = "Rat" --Nome do summon.local summon_count = { --[vocation_id] = max_summons, [1] = 2, [2] = 4, [5] = 4, [6] = 6, [9] = 6, [10] = 8,}function onCastSpell(cid) local playerpos = getPlayerPosition(cid) if #getCreatureSummons(cid) >= summon_count[getPlayerVocation(cid)] then doPlayerSendCancel(cid, "Você já tem sumons demais.") return false end doConvinceCreature(cid, doCreateMonster(summon_name, playerpos)) doSendMagicEffect(playerpos, 2) return trueend
Editado Dezembro 9 por zipter98
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

1 hora atrás, zipter98 disse:
Obrigado! Uma spell por monstro já está de ótimo tamanho, tive uma ideia do que fazer com isso.
Vou testar aqui e já posto o feedback, mas já vou te dar rep pela ajuda.
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

8 horas atrás, zipter98 disse:onCastSpell não possui um argumento responsável pelos parâmetros da fala. Por isso, as palavras-chaves limitam-se às configuradas na tag.
Por condições como mana, level e classe encontrarem-se na tag, não vi necessidade de mantê-las no código.
Naturalmente, sem poder usar um parâmetro para especificar qual summon o jogador deseja, será um código por monstro.
A spell funcionou, mas quando chegava no limite de summons, não sumonava nada, mas continuava gastando mana, mas resolvi trocando o return true por return false.
Obrigado.
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Caro membro, seu tópico foi movido de Otserv > Suporte Otserv para Suporte Otserv > Otserv > Pedidos e Dúvidas Resolvidos.




info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian
Como o título já diz, gostaria que alguém transformasse esse talkaction em uma spell.
Segue o script:
local storage = 79845 --storage para o exhaustionlocal tempo = 5 --em segundoslocal monsters = {[1] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 2 },[2] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4 },[5] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4 },[6] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6 },[9] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6 },[10] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 8 },}function onSay(cid, words, param, channel)if exhaustion.check(cid, storage) thendoPlayerSendTextMessage(cid, 22, "You are exhausted.")return trueend --Player Status local playerpos = getPlayerPosition(cid) param = string.lower(param) local loop = 0 function checkSummon() for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do if param == k then return true end end return false end if not checkSummon() then doPlayerSendCancel(cid, "You can't summon this monster.") return true end for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do if (param == k) then if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then return doPlayerSendCancel(cid, "Você já tem sumons demais.") else --Summon if getPlayerLevel(cid) < v.level then return doPlayerSendCancel(cid, "Você não possui level suficiente.") elseif getCreatureMana(cid) < v.mana then return doPlayerSendCancel(cid, "Você não possui mana suficiente.") end doConvinceCreature(cid, doCreateMonster(param, playerpos)) doPlayerAddMana(cid, -v.mana, false) exhaustion.set(cid, storage, tempo) doSendMagicEffect(playerpos, 2) return true end end end return trueend